1. Field of the Invention
The present invention is related to networking computer systems, and more specifically to a method and system for implementing remote procedure call (RPC) programs in a manner that ensures their accessibility.
2. Description of Related Art
In networked computer systems, and in particular, in systems that include multiple network interfaces per processing node, there are typically multiple sub-nets and in larger networks, multiple domains. Each sub-net or domain will typically include many computer systems, each of which is executing an operating system that may provide RPC programs to client applications both within the same computer system, and to remote RPC clients that are connected to the computer system through a network path. The daemon that manages RPC connections is named rpcbind.
An RPC application registers one or more RPC programs that it supports by calling an interface on rpcbind daemon: rpcb_reg( ) The rpcb_reg( ) call provides an RPC program number, and a successful call registers the program provider as the provider of that program. Subsequent rpcb_getaddr( ) calls to the rpcbind daemon by prospective clients provide a program number, which the rpcbind daemon satisfies by returning a universal network address associated with the RPC application that supports the RPC program that was requested.
However, in the multi-horned system described above, a prospective RPC client cannot necessarily use the address for an RPC application that the RPC bind daemon may return. For example, if an RPC application that serves a particular RPC program is on a first sub-net of the network and the prospective client is on a second sub-net, the address returned by the RPC bind daemon for the RPC application in the first sub-net may not have a routing path from the second sub-net. Further, even if such a path is present, there may be a firewall or filtering present, or the route may be very inefficient. The particular location of a prospective RPC client is typically not known, since the request may have originated anywhere in the network and from any network adapter connected to the operating system hosting the rpcbind daemon reached by the request. Further, when complex network connections are involved, a request could prospectively reach multiple rpcbind daemon instances and/or an rpcbind instance could potentially be aware of multiple applications that service a program number, configurations that are either avoided, or in the case of multiple applications servicing a program number, typically rejected by the rpcbind daemon. While alternate rpcbind daemons and/or multiple RPC applications servicing a program number could provide improved connectivity to RPC programs, the structure of the RPC mechanism typically prohibits such arrangements.
Therefore, it would be desirable to provide a rpcbind daemon that can provide accessible RPC program addresses in a network including multi-horned computer systems. It would further be desirable to provide RPC functionality for a given program number from multiple applications and to provide multiple distributed rpcbind daemons within a network.